/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Contabilidad;

import CONTROLES.Conexion;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Formatter;

/**
 *
 * @author Administrador
 */
public class ControlActivoFijo {   

    public ControlActivoFijo(){

    }
    
    public boolean registrarActivo(ActivoFijo activo)
    {
       Conexion conection = new Conexion();
       try
       {
          Connection conectado = conection.getConexion();

          PreparedStatement ps1 = conectado.prepareStatement("select nextval('activo_fijo_id_activo_seq')");
          ResultSet respEmp = ps1.executeQuery();
          int c = 0;
          respEmp.next();
          c = respEmp.getInt(1);
          ps1.close();
          String codigo = generarCodigo(activo, c);          
          PreparedStatement ps = conectado.prepareStatement("INSERT INTO activo_fijo(id_activo, codigo, nombre, descripcion, valor, id_sucursal, id_cuenta_plan, fecha_de_adquisicion, activo) VALUES ('"+c+"','"+codigo+"','"+activo.getNombre()+"','"+activo.getDescripcion()+"','"+activo.getValor()+"','"+activo.getIdSucursal()+"','"+activo.getIdCuentaPlan()+"','"+activo.getFecha()+"', '"+activo.getActivo()+"')");
          ps.executeUpdate();
          ps.close();
          } catch (SQLException em) {
                System.out.println("error al insertar el Activo en la base de datos "+em.getLocalizedMessage() );
                return false;
          }
       return true;
     }

    public String generarCodigo(ActivoFijo activo, int id){

        Formatter fmt = new Formatter();
        fmt.format("%03d", activo.getIdSucursal());

        return fmt.toString()+"-"+activo.getIdCuentaPlan()+"-"+id;
    }


    public ArrayList<ActivoFijo> getListaActivos(int idSucursal){
        Conexion conection = new Conexion();
        ArrayList<ActivoFijo> res = new ArrayList<ActivoFijo>();
        ActivoFijo activo;
        try{
            Connection conectado = conection.getConexion();

            PreparedStatement psc = conectado.prepareStatement("select * from activo_fijo WHERE id_sucursal = '"+idSucursal+"' ORDER BY id_activo ASC");
            ResultSet respEmp = psc.executeQuery();
            while (respEmp.next()){
                activo= new ActivoFijo();
                activo.setIdActivo(respEmp.getInt(1));
                activo.setCodigo(respEmp.getString(2));
                activo.setDescripcion(respEmp.getString(3));
                activo.setValor(respEmp.getDouble(4));
                activo.setIdSucursal(respEmp.getInt(5));
                activo.setNombre(respEmp.getString(6));
                activo.setIdCuentaPlan(respEmp.getInt(7));
                activo.setFecha(respEmp.getDate(8));
                activo.setActivo(respEmp.getBoolean(9));

                res.add(activo);
            }
        }
        catch (SQLException e){
            System.out.println("error al recuperar lista de ACTIVOS por sucursal" + e.getLocalizedMessage());
        }

        return res;
    }
    public ActivoFijo getActivo(int idActivo){
        Conexion conection = new Conexion();
        ActivoFijo activo = new ActivoFijo();
        try{
            Connection conectado = conection.getConexion();

            PreparedStatement psc = conectado.prepareStatement("select * from activo_fijo WHERE id_activo = '"+idActivo+"' ");
            ResultSet respEmp = psc.executeQuery();
            respEmp.next();
            activo.setIdActivo(respEmp.getInt(1));
            activo.setCodigo(respEmp.getString(2));
            activo.setDescripcion(respEmp.getString(3));
            activo.setValor(respEmp.getDouble(4));
            activo.setIdSucursal(respEmp.getInt(5));
            activo.setNombre(respEmp.getString(6));
            activo.setIdCuentaPlan(respEmp.getInt(7));
            activo.setFecha(respEmp.getDate(8));
            activo.setActivo(respEmp.getBoolean(9));
        }
        catch (SQLException e){
            System.out.println("error al recuperar el ACTIVO por id" + e.getLocalizedMessage());
        }

        return activo;
    }

    public ArrayList<ActivoFijo> getListaActivosActivos(int idSucursal, int codigo) {
        Conexion conection = new Conexion();
        ArrayList<ActivoFijo> res = new ArrayList<ActivoFijo>();
        ActivoFijo activo;
        try{
            Connection conectado = conection.getConexion();

            PreparedStatement psc = conectado.prepareStatement("select * from activo_fijo WHERE id_sucursal = '"+idSucursal+"' AND id_cuenta_plan = '"+codigo+"' AND activo = 'true' ORDER BY id_activo ASC");
            ResultSet respEmp = psc.executeQuery();
            while (respEmp.next()){
                activo= new ActivoFijo();
                activo.setIdActivo(respEmp.getInt(1));
                activo.setCodigo(respEmp.getString(2));
                activo.setDescripcion(respEmp.getString(3));
                activo.setValor(respEmp.getDouble(4));                
                activo.setIdSucursal(respEmp.getInt(5));
                activo.setNombre(respEmp.getString(6));
                activo.setIdCuentaPlan(respEmp.getInt(7));
                activo.setFecha(respEmp.getDate(8));
                activo.setActivo(respEmp.getBoolean(9));

                res.add(activo);
            }
        }
        catch (SQLException e){
            System.out.println("error al recuperar lista de ACTIVOS por sucursal y cuenta contable" + e.getLocalizedMessage());
        }

        return res;
    }

    public boolean DarDeBaja(int idActivo) {
        Conexion conection = new Conexion();
       try
       {
          Connection conectado = conection.getConexion();
          PreparedStatement ps = conectado.prepareStatement("UPDATE activo_fijo SET activo = 'false'WHERE id_activo = '"+idActivo+"';");
          ps.executeUpdate();
          ps.close();
          } catch (SQLException em) {
                System.out.println("error al Dar de baja al Activo en la base de datos "+em.getLocalizedMessage() );
                return false;
          }
       return true;
    }
}
